home *** CD-ROM | disk | FTP | other *** search
- /* $Filename: WormWars/Source/rp.c $
- * $VER: Report+ 1.1 (11.12.99) $
- * $Description: Bug report/Aminet readme generator $
- *
- * © Copyright 1999 James R. Jacobs. Freely distributable.
- * _
- * // -=AMIGA=-
- * //
- * _ //
- * \\ //
- * \X/
- *
- * Release version.
-
- #INCLUDES -------------------------------------------------------------- */
-
- #include "rp.h" // #includes everything else
-
- IMPORT struct Library* SysBase;
- MODULE struct ASLBase* ASLBase = NULL;
- MODULE struct GadToolsBase* GadToolsBase = NULL;
- MODULE struct GfxBase* GfxBase = NULL;
- MODULE struct IntuitionBase* IntuitionBase = NULL;
-
- MODULE TEXT aslresult[MEDFIELD + 1],
- string[VLONGFIELD + 1],
- IOBuffer[4096];
- MODULE ULONG offset;
- MODULE SBYTE page = 0;
- MODULE struct TextFont* FontPtr = NULL;
- MODULE APTR OldWindowPtr = NULL;
- MODULE struct Window *BkgrndWindowPtr = NULL,
- *MainWindowPtr = NULL;
- MODULE struct Menu* MenuPtr = NULL;
- MODULE struct List List1, List2;
- MODULE struct Process* ProcessPtr = NULL;
-
- MODULE struct Gadget // misc
- *GListPtr = NULL,
- *NextGadPtr = NULL,
- *PrevGadPtr = NULL,
- *PreviousGadPtr = NULL,
- *OutputGadPtr = NULL,
- *OutputASLGadPtr = NULL,
-
- // page 0
- *FunctionGadPtr = NULL,
- *EditorGadPtr = NULL,
- *EditorASLGadPtr = NULL,
-
- // page 1
- *SummaryGadPtr = NULL,
- *TypeGadPtr = NULL,
-
- // page 2
- *DebugGadPtr = NULL,
- *KSGadPtr = NULL,
- *SubsystemGadPtr = NULL,
- *PPGadPtr = NULL,
- *PPASLGadPtr = NULL,
- *PVGadPtr = NULL,
- *SeverityGadPtr = NULL,
- *ThirdGadPtr = NULL,
- *ThirdNameGadPtr = NULL,
- *ThirdVerGadPtr = NULL,
- *ThirdManufGadPtr = NULL,
- *WBGadPtr = NULL,
-
- // page 3
- *CompanyGadPtr = NULL,
- *DeveloperGadPtr = NULL,
- *EMailGadPtr = NULL,
- *FirstNameGadPtr = NULL,
- *LastNameGadPtr = NULL,
- *PhoneGadPtr = NULL,
-
- // page 4
- *ModelGadPtr = NULL,
- *ModelTextGadPtr = NULL,
- *AgnusGadPtr = NULL,
- *AgnusTextGadPtr = NULL,
- *CPUGadPtr = NULL,
- *CPUTextGadPtr = NULL,
- *DeniseGadPtr = NULL,
- *DeniseTextGadPtr = NULL,
- *FloppiesGadPtr = NULL,
- *ChipGadPtr = NULL,
- *ChipTextGadPtr = NULL,
- *FastGadPtr = NULL,
- *FastTextGadPtr = NULL,
- *HardGadPtr = NULL,
- *ExpansionGadPtr = NULL,
-
- // page 6
- *ShortGadPtr = NULL,
- *UploaderGadPtr = NULL,
- *AuthorGadPtr = NULL,
- *RequiresGadPtr = NULL,
- *VersionGadPtr = NULL,
- *DistributionGadPtr = NULL,
- *AmiTypeGadPtr = NULL,
- *ReplacesGadPtr = NULL;
-
- MODULE struct Screen* ScreenPtr = NULL;
- MODULE struct VisualInfo* VisualInfoPtr = NULL;
- MODULE struct TextAttr Topaz8 =
- { (STRPTR) "Topaz.font", 8, FS_NORMAL, FPF_ROMFONT | FPF_DESIGNED
- };
-
- // FUNCTIONS --------------------------------------------------------------
-
- int main(int argc, char** argv)
- { UWORD Pens[10] =
- { BLACK, // DETAILPEN text in title bar
- WHITE, // BLOCKPEN fill title bar
- BLACK, // TEXTPEN regular text on BACKGROUNDPEN
- WHITE, // SHINEPEN bright edge
- BLACK, // SHADOWPEN dark edge
- RED, /* FILLPEN filling active window borders
- and selected gadgets */
- BLACK, // FILLTEXTPEN text rendered over FILLPEN
- LIGHTGREY, // BACKGROUNDPEN background colour
- WHITE, // HIGHLIGHTTEXTPEN highlighted text on BACKGROUNDPEN
- (UWORD) ~0
- };
- struct ColorSpec Colours[9] =
- { /* colour red green blue description */
- { 0, 0x9, 0x8, 0xA}, // GREY
- { 1, 0x0, 0x0, 0x0}, // BLACK
- { 2, 0xF, 0xF, 0xF}, // WHITE
- { 3, 0xF, 0x7, 0x7}, // RED
- { 4, 0x6, 0x6, 0xF}, // BLUE
- { 5, 0xD, 0xC, 0xE}, // LIGHTGREY
- { 6, 0xF, 0xF, 0x2}, // YELLOW
- { 7, 0xF, 0x2, 0xF}, // PURPLE
- { -1, NULL, NULL, NULL
- } };
-
- /* Start of program.
-
- version embedding into executable */
-
- if (0) // that is, never
- printf(VERSION);
-
- if (!(IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", 37L)))
- { Write(Output(), OLDKICKSTART, strlen(OLDKICKSTART));
- cleanexit(EXIT_FAILURE);
- }
- if (SysBase->lib_Version < 36L)
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Need exec.library V36+!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(GadToolsBase = (struct GadToolsBase *) OpenLibrary("gadtools.library", 37L)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open GadTools.library V37+!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
-
- // From this point onwards, we can be sure we have Kickstart 2.04+...
-
- if (!(ASLBase = (struct ASLBase *) OpenLibrary("asl.library", 0L)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open ASL.library!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
-
- ProcessPtr = (struct Process *) FindTask(NULL);
-
- /* PREPARE DISPLAY -----------------------------------------------
-
- screen */
-
- if (!(ScreenPtr = (struct Screen *) OpenScreenTags
- ( NULL,
- SA_Width, 640,
- SA_Height, 256,
- SA_Depth, DEPTH,
- SA_DisplayID, HIRES_KEY,
- SA_Title, TITLEBAR,
- SA_Colors, Colours,
- SA_Font, &Topaz8,
- SA_Pens, Pens,
- SA_DetailPen, BLACK,
- SA_BlockPen, WHITE,
- TAG_DONE
- )))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open screen!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(BkgrndWindowPtr = (struct Window *) OpenWindowTags(NULL,
- WA_Top, 12,
- WA_Width, 640,
- WA_Height, 244,
- WA_IDCMP, NULL,
- WA_Gadgets, NULL,
- WA_CustomScreen, ScreenPtr,
- WA_Activate, FALSE,
- WA_Title, NULL,
- WA_Borderless, TRUE,
- WA_Backdrop, TRUE,
- TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open backdrop window!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- SetAPen(BkgrndWindowPtr->RPort, BLUE);
- RectFill(BkgrndWindowPtr->RPort, 0, 0, 640, 244);
-
- while(1)
- { if (page == 0)
- page0();
- elif (page == 1)
- page1();
- elif (page == 2)
- page2();
- elif (page == 3)
- page3();
- elif (page == 4)
- page4();
- elif (page == 5)
- page5();
- elif (page == 6)
- page6();
- else // assumes page == 7
- page7();
- } }
-
- void page0(void)
- { // PAGE 0 *************************************************************
-
- gadtools();
- navigate();
-
- // function
- setgadget(260, 24, 0, 0, NULL, PLACETEXT_RIGHT);
- FunctionGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &FunctionOptions,
- GTMX_Active, report.function,
- TAG_DONE
- );
-
- // editor
- if (report.editor[0] == 0)
- if (GetVar("EDITOR", &(report.editor), LONGFIELD, NULL) == -1)
- strcpy(report.editor, "SYS:Tools/MEmacs");
- setgadget(232, 54, 240, 12, "Editor pathname:", NULL);
- EditorGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.editor),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
- // editor...
- setgadget(474, 54, 28, 12, "...", NULL);
- EditorASLGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
-
- newwindow
- ( 640,
- PAGE0HEIGHT,
- "Report+: Function Selection",
- BUTTONIDCMP | MXIDCMP
- );
- loop();
- strcpy
- ( report.editor,
- ((struct StringInfo *) EditorGadPtr->SpecialInfo)->Buffer
- );
- closewindow();
- }
-
- void page1(void)
- { // PAGE 1 *************************************************************
-
- gadtools();
- navigate();
-
- // type
- setgadget(152, 50, 0, 0, NULL, PLACETEXT_RIGHT);
- TypeGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &RadioOptions1,
- GTMX_Active, report.type,
- TAG_DONE
- );
-
- // summary
- setgadget(64, 30, 512, 12, "Summary:", PLACETEXT_ABOVE);
- SummaryGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- STRINGA_Justification, GACT_STRINGCENTER,
- GTST_String, &(report.subject),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // output
- if (!(report.output[0]))
- strcpy(report.output, "RAM:Report.txt");
- setgadget(242, 88, 240, 12, "Output pathname:", NULL);
- OutputGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.output),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
- // output...
- setgadget(484, 88, 28, 12, "...", NULL);
- OutputASLGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
-
- newwindow
- ( 640,
- PAGE1HEIGHT,
- "Report+: Report Details 1",
- BUTTONIDCMP | MXIDCMP | STRINGIDCMP
- );
- ActivateGadget(SummaryGadPtr, MainWindowPtr, NULL);
-
- loop();
- strcpy
- ( report.subject,
- ((struct StringInfo *) SummaryGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.output,
- ((struct StringInfo *) OutputGadPtr->SpecialInfo)->Buffer
- );
- closewindow();
- }
-
- void page2(void)
- { UBYTE i;
-
- // PAGE 2 *************************************************************
-
- gadtools();
- navigate();
-
- if (report.type == BUG || report.type == ENH)
- { NewList(&List1);
- for (i = 0; i <= SUBSYSTEMS; i++)
- AddName(&List1, subsystems[i].friendly);
- setgadget(16, 28, 150, 130, "Subsystem:", NULL);
- SubsystemGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( LISTVIEW_KIND,
- PrevGadPtr,
- &Gadget,
- GTLV_Labels, &List1,
- GTLV_ShowSelected, NULL,
- GTLV_Selected, report.subsystem,
- TAG_DONE
- );
- } else // assumes report.type == COM
- { // 3rd party product
- setgadget(160, 28, 100, 12, "Third Party Product:", PLACETEXT_ABOVE);
- ThirdGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- // 3rd party product name
- setgadget(160, 28, 100, 12, "Name:", NULL);
- ThirdNameGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.thirdname),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // 3rd party product version
- setgadget(160, 40, 100, 12, "Version:", NULL);
- ThirdVerGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.thirdver),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // 3rd party product manufacturer
- setgadget(160, 52, 100, 12, "Manufacturer:", NULL);
- ThirdManufGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.thirdmanuf),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
- }
-
- if (report.type == BUG || report.type == COM)
- { // debug tools and wedges
- setgadget(400, 69, 196, 12, "Debug tools and wedges:", NULL);
- DebugGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.debug),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // classification
- setgadget(308, 24, 0, 0, NULL, PLACETEXT_RIGHT);
- if (report.type == BUG)
- { if (report.severity == 3)
- report.severity = 0;
- SeverityGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &RadioOptions2,
- GTMX_Active, report.severity,
- TAG_DONE
- );
- } else // assumes (report.type == COM)
- SeverityGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &RadioOptions3,
- GTMX_Active, report.severity,
- TAG_DONE
- );
- }
- if (report.type == BUG)
- { // program version
- setgadget(400, 131, 196, 12, "Program pathname:", NULL);
- PPGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.pp),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
- // program...
- setgadget(598, 131, 28, 12, "...", NULL);
- PPASLGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(400, 143, 196, 12, "Program version:", NULL);
- PVGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.pv),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
- }
-
- if (report.type == BUG || report.type == COM)
- { // kickstart version
- if (report.ks[0] == 0)
- if (GetVar("Kickstart", &(report.ks), 6, NULL) == -1)
- report.ks[0] = 0;
- setgadget(400, 93, 60, 12, "Kickstart version:", NULL);
- KSGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.ks),
- GTST_MaxChars, 6,
- GA_TabCycle, TRUE,
- STRINGA_Justification, GACT_STRINGRIGHT,
- TAG_DONE
- );
-
- // workbench version
- if (report.wb[0] == 0)
- if (GetVar("Workbench", &(report.wb), 6, NULL) == -1)
- report.wb[0] = 0;
- setgadget(400, 105, 60, 12, "Workbench version:", NULL);
- WBGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.wb),
- GTST_MaxChars, 6,
- GA_TabCycle, TRUE,
- STRINGA_Justification, GACT_STRINGRIGHT,
- TAG_DONE
- );
- }
- newwindow
- ( 640,
- PAGE2HEIGHT,
- "Report+: Report Details 2",
- BUTTONIDCMP | LISTVIEWIDCMP | MXIDCMP
- );
- ActivateGadget(KSGadPtr, MainWindowPtr, NULL);
-
- loop();
- if (report.type == COM)
- { strcpy
- ( report.thirdver,
- ((struct StringInfo *) ThirdVerGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.thirdname,
- ((struct StringInfo *) ThirdNameGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.thirdmanuf,
- ((struct StringInfo *) ThirdManufGadPtr->SpecialInfo)->Buffer
- );
- } elif (report.type == BUG)
- { strcpy
- ( report.pp,
- ((struct StringInfo *) PPGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.pv,
- ((struct StringInfo *) PVGadPtr->SpecialInfo)->Buffer
- );
- }
- strcpy
- ( report.ks,
- ((struct StringInfo *) KSGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.wb,
- ((struct StringInfo *) WBGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.debug,
- ((struct StringInfo *) DebugGadPtr->SpecialInfo)->Buffer
- );
- closewindow();
- }
-
- void page3(void)
- { // PAGE 3 *************************************************************
-
- gadtools();
- navigate();
- if (read("S:Report.sender"))
- { /* # Refer: <last>,<first> (<company> ,phone <phone>)<LF>
- # Path: <email><LF>
- # ReferID: <developer><LF> */
-
- offset = 0;
- parse("# Refer: ");
- parse(",");
- strcpy(report.lastname, string);
- parse(" (");
- strcpy(report.firstname, string);
- parse(" ,phone ");
- strcpy(report.company, string);
- parse(")\n# Path: ");
- strcpy(report.phone, string);
- parse("\n# ReferID: ");
- strcpy(report.email, string);
- parse("\n");
- report.developer = atol(string);
- }
-
- // first name
- setgadget(326, 22, 128, 12, "First name:", NULL);
- FirstNameGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.firstname),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // last name
- setgadget(326, 34, 128, 12, "Last name:", NULL);
- LastNameGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.lastname),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // company name
- setgadget(326, 46, 128, 12, "Company:", NULL);
- CompanyGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.company),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // phone
- setgadget(326, 58, 128, 12, "Phone number:", NULL);
- PhoneGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.phone),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // developer number
- setgadget(326, 70, 128, 12, "Developer number:", NULL);
- DeveloperGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( INTEGER_KIND,
- PrevGadPtr,
- &Gadget,
- GTIN_Number, report.developer,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // email
- setgadget(326, 82, 256, 12, "EMail:", NULL);
- EMailGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.email),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- newwindow
- ( 640,
- PAGE3HEIGHT,
- "Report+: Sender Details",
- BUTTONIDCMP | STRINGIDCMP
- );
- ActivateGadget(FirstNameGadPtr, MainWindowPtr, NULL);
- loop();
-
- /* write out S:Report.sender
-
- # Refer: <last>,<first> (<company> ,phone <phone>)<LF>
- # Path: <email><LF>
- # ReferID: <developer><LF> */
-
- strcpy(report.refer, "# Refer: ");
- strcat
- ( report.refer,
- ((struct StringInfo *) LastNameGadPtr->SpecialInfo)->Buffer
- );
- strcat(report.refer, ",");
- strcat
- ( report.refer,
- ((struct StringInfo *) FirstNameGadPtr->SpecialInfo)->Buffer
- );
- strcat(report.refer, " (");
- strcat
- ( report.refer,
- ((struct StringInfo *) CompanyGadPtr->SpecialInfo)->Buffer
- );
- strcat(report.refer, " ,phone ");
- strcat
- ( report.refer,
- ((struct StringInfo *) PhoneGadPtr->SpecialInfo)->Buffer
- );
- strcat(report.refer, ")\n");
-
- strcpy(report.path, "# Path: ");
- strcat
- ( report.path,
- ((struct StringInfo *) EMailGadPtr->SpecialInfo)->Buffer
- );
- strcat(report.path, "\n");
-
- strcpy(report.referid, "# ReferID: ");
- stcl_d
- ( string,
- ((struct StringInfo *) DeveloperGadPtr->SpecialInfo)->LongInt
- );
- strcat(report.referid, string);
- strcat(report.referid, "\n");
-
- strcpy(IOBuffer, report.refer);
- strcat(IOBuffer, report.path);
- strcat(IOBuffer, report.referid);
-
- write("S:Report.sender");
- closewindow();
- }
-
- void page4(void)
- { // PAGE 4 **************************************************************
-
- UBYTE i;
-
- gadtools();
- navigate();
-
- if (read("S:Report.config"))
- { /* # Config: <model>,<cpu>,A=AA|ECS-pal|ECS|old-pal|old,
- D=AA|ECS|old,RAM=<chip>megC/<fast>megF,TD=<floppies>,
- HD=<controller>,<cards><LF> */
-
- offset = 0;
- parse("# Config: ");
-
- parse(",");
- report.model = 4;
- for (i = 0; i <= MODELS; i++)
- if (!stricmp(string, ModelOptions[i]))
- report.model = i;
-
- parse(",A=");
- report.cpu = 1;
- for (i = 0; i <= CPUS; i++)
- if (!stricmp(string, CPUOptions[i]))
- report.cpu = i;
-
- parse(",D=");
- if (!stricmp(string, "AA"))
- report.agnus = 0;
- elif (!stricmp(string, "ECS-pal"))
- report.agnus = 1;
- elif (!stricmp(string, "ECS"))
- report.agnus = 2;
- elif (!stricmp(string, "old-pal"))
- report.agnus = 3;
- else // if (!stricmp(string, "old"))
- report.agnus = 4;
-
- parse(",RAM=");
- if (!stricmp(string, "AA"))
- report.denise = 0;
- elif (!stricmp(string, "ECS"))
- report.denise = 1;
- else // if (!stricmp(string, "old"))
- report.denise = 2;
-
- parse("megC/");
- strcpy(report.chipram, string);
-
- parse("megF,TD=");
- strcpy(report.fastram, string);
-
- parse(",HD=");
- report.floppies = atol(string);
-
- parse(",");
- strcpy(report.hard, string);
-
- parse("\n");
- strcpy(report.expansion, string);
- }
-
- /* These formal coordinates of these text gadgets must not overlap the
- radio gadgets, otherwise any such overlapped radio gadgets will not be
- selectable. */
-
- // model
- setgadget(64, 30, 100, 0, "Model:", PLACETEXT_ABOVE);
- ModelTextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(64, 30, 0, 0, NULL, PLACETEXT_RIGHT);
- ModelGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &ModelOptions,
- GTMX_Active, report.model,
- TAG_DONE
- );
-
- // Agnus
- setgadget(192, 30, 100, 0, "Agnus/Alice Type:", PLACETEXT_ABOVE);
- AgnusTextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(192, 30, 0, 0, NULL, PLACETEXT_RIGHT);
- AgnusGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &AgnusOptions,
- GTMX_Active, report.agnus,
- TAG_DONE
- );
-
- // Denise
- setgadget(384, 30, 100, 0, "Denise/Lisa Type:", PLACETEXT_ABOVE);
- DeniseTextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(384, 30, 0, 0, NULL, PLACETEXT_RIGHT);
- DeniseGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &DeniseOptions,
- GTMX_Active, report.denise,
- TAG_DONE
- );
-
- // CPU
- setgadget(512, 30, 100, 0, "Processor:", PLACETEXT_ABOVE);
- CPUTextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(512, 30, 0, 0, NULL, PLACETEXT_RIGHT);
- CPUGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( MX_KIND,
- PrevGadPtr,
- &Gadget,
- GTMX_Labels, &CPUOptions,
- GTMX_Active, report.cpu,
- TAG_DONE
- );
-
- // chip RAM
- setgadget(400, 98, 64, 12, "Mb", PLACETEXT_RIGHT);
- ChipTextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(400, 98, 64, 12, "Chip RAM:", NULL);
- ChipGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.chipram),
- GTST_MaxChars, 4,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // slow/fast RAM
- setgadget(400, 110, 64, 12, "Mb", PLACETEXT_RIGHT);
- FastTextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( TEXT_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- setgadget(400, 110, 64, 12, "Slow/fast RAM:", NULL);
- FastGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.fastram),
- GTST_MaxChars, 4,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // floppies
- setgadget(400, 122, 64, 12, "Number of floppies:", NULL);
- FloppiesGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( INTEGER_KIND,
- PrevGadPtr,
- &Gadget,
- GTIN_Number, report.floppies,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // hard disk controller
- setgadget(400, 134, 128, 12, "Hard disk controller:", NULL);
- HardGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.hard),
- GTST_MaxChars, MEDFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- // expansion cards
- setgadget(400, 146, 228, 12, "Expansion cards:", NULL);
- ExpansionGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.expansion),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- TAG_DONE
- );
-
- newwindow
- ( 640,
- PAGE4HEIGHT,
- "Report+: Configuration Details",
- BUTTONIDCMP | STRINGIDCMP | MXIDCMP
- );
- ActivateGadget(ChipGadPtr, MainWindowPtr, NULL);
- loop();
-
- strcpy(report.chipram, ((struct StringInfo *) ChipGadPtr->SpecialInfo)->Buffer);
- strcpy(report.fastram, ((struct StringInfo *) FastGadPtr->SpecialInfo)->Buffer);
- strcpy(report.hard, ((struct StringInfo *) HardGadPtr->SpecialInfo)->Buffer);
- report.floppies = ((struct StringInfo *) FloppiesGadPtr->SpecialInfo)->LongInt;
- strcpy(report.expansion, ((struct StringInfo *) ExpansionGadPtr->SpecialInfo)->Buffer);
-
- strcpy(report.config, "# Config: ");
- strcpy(string, ModelOptions[report.model]);
- strlwr(string);
- strcat(report.config, string);
- strcat(report.config, ",");
- strcpy(string, CPUOptions[report.cpu]);
- strlwr(string);
- strcat(report.config, string);
- strcat(report.config, ",A=");
- switch(report.agnus)
- {
- case 0:
- strcat(report.config, "AA");
- break;
- case 1:
- strcat(report.config, "ECS-pal");
- break;
- case 2:
- strcat(report.config, "ECS");
- break;
- case 3:
- strcat(report.config, "old-pal");
- break;
- default:
- strcat(report.config, "old");
- break;
- }
- strcat(report.config, ",D=");
- switch(report.denise)
- {
- case 0:
- strcat(report.config, "AA");
- break;
- case 1:
- strcat(report.config, "ECS");
- break;
- default:
- strcat(report.config, "old");
- break;
- }
- strcat(report.config, ",RAM=");
- strcat(report.config, report.chipram);
- strcat(report.config, "megC/");
- strcat(report.config, report.fastram);
- strcat(report.config, "megF,TD=");
- stcl_d(string, report.floppies);
- strcat(report.config, string);
- strcat(report.config, ",HD=");
- strcat(report.config, report.hard);
- strcat(report.config, ",");
- strcat(report.config, report.expansion);
- strcat(report.config, "\n");
-
- strcpy(IOBuffer, report.config);
- write("S:Report.config");
- closewindow();
- }
-
- void page5(void)
- { TEXT weekdaystring[10],
- datestring[10],
- timestring[9];
- struct DateTime DateTime;
-
- DateTime.dat_Format = FORMAT_DOS;
- DateTime.dat_Flags = NULL;
- DateTime.dat_StrDay = weekdaystring;
- DateTime.dat_StrDate = datestring;
- DateTime.dat_StrTime = timestring;
-
- newwindow
- ( 640,
- PAGE5HEIGHT,
- "Report+: Finished Bug Report",
- BUTTONIDCMP
- );
-
- /* # Subject: <subject><LF>
- # Type: bug|compat|enhancement<LF>
- 1,3 # Subsystem: <subsystem><LF>
- 2 # ProductName: <name> (vers=<version>)
- 2 # ProductInfo: :<manufacturer>:
- # Severity: a|b|c|ok|e
- 1 # Release: KS=<version>,WB=<version>,Program=<version>
- 2 # Release: KS=<version>,WB=<version>
- # Date: <weekday> dd-Mon-yy hh:mm:ss
- # Refer: <refer>
- # Path: <path>
- # ReferID: <referid>
- # Config: <config>
- 1,2a-c ### BRIEF BUG DESCRIPTION:
- 1,2a-c ### BUG GENERATION PROCEDURE OR EXAMPLE:
- 1,2 ### ALSO RUNNING:
- <debug>
- 1,2 ### IF THIS WORKS DIFFERENTLY ON OTHER VERSIONS OR HARDWARE,
- EXPLAIN:
- 2a-c ### WHAT DEVELOPER IS DOING IN THAT AREA OF SW OR HW:
- 1,2a-c ### RELATED PROBLEMS:
- 3 ### ENHANCEMENT REQUEST: */
-
- strcpy(IOBuffer, "# Subject: ");
- strcat(IOBuffer, report.subject);
- strcat(IOBuffer, "\n# Type: ");
- if (report.type == BUG)
- strcat(IOBuffer, "bug");
- elif (report.type == COM)
- strcat(IOBuffer, "compat");
- else // assumes (report.type == ENH)
- strcat(IOBuffer, "enhancement");
- strcat(IOBuffer, "\n");
- if (report.type == BUG || report.type == ENH)
- { strcat(IOBuffer, "# Subsystem: ");
- strcat(IOBuffer, subsystems[SUBSYSTEMS - report.subsystem].unfriendly);
- strcat(IOBuffer, "\n");
- } else
- { strcat(IOBuffer, "# ProductName: ");
- strcat(IOBuffer, report.thirdname);
- strcat(IOBuffer, " (vers=");
- strcat(IOBuffer, report.thirdver);
- strcat(IOBuffer, ")\n# ProductInfo: :");
- strcat(IOBuffer, report.thirdmanuf);
- strcat(IOBuffer, ":\n");
- }
- strcat(IOBuffer, "# Severity: ");
- if (report.type == ENH)
- strcat(IOBuffer, "e");
- elif (report.severity == 0)
- strcat(IOBuffer, "a");
- elif (report.severity == 1)
- strcat(IOBuffer, "b");
- elif (report.severity == 2)
- strcat(IOBuffer, "c");
- else // assumes report.severity == 3
- strcat(IOBuffer, "ok");
- strcat(IOBuffer, "\n");
- if (report.type == BUG || report.type == COM)
- { strcat(IOBuffer, "# Release: KS=");
- strcat(IOBuffer, report.ks);
- strcat(IOBuffer, ",WB=");
- strcat(IOBuffer, report.wb);
- if (report.type == BUG)
- { strcat(IOBuffer, ",Program=");
- strcat(IOBuffer, report.pv);
- }
- strcat(IOBuffer, "\n");
- }
- DateStamp(&(DateTime.dat_Stamp));
- if (!DateToStr(&DateTime))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Couldn't convert date!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- strcat(IOBuffer, "# Date: ");
- strcat(IOBuffer, weekdaystring);
- strcat(IOBuffer, " ");
- strcat(IOBuffer, datestring);
- strcat(IOBuffer, " ");
- strcat(IOBuffer, timestring);
- strcat(IOBuffer, "\n");
- strcat(IOBuffer, report.refer);
- strcat(IOBuffer, report.path);
- strcat(IOBuffer, report.referid);
- strcat(IOBuffer, report.config);
- strcat(IOBuffer, "\n");
- if (report.type == BUG || (report.type == COM && report.severity != 3))
- { strcat
- ( IOBuffer,
- "### BRIEF BUG DESCRIPTION:\n\n\n"
- "### BUG GENERATION PROCEDURE OR EXAMPLE:\n\n\n"
- );
- }
- if (report.type == BUG || report.type == COM)
- { strcat(IOBuffer, "### ALSO RUNNING:\n");
- strcat(IOBuffer, report.debug);
- strcat
- ( IOBuffer,
- "\n\n### IF THIS WORKS DIFFERENTLY ON "
- "OTHER VERSIONS OR HARDWARE, EXPLAIN:\n\n\n"
- );
- }
- if (report.type == COM && report.severity != 3)
- { strcat
- ( IOBuffer,
- "### WHAT DEVELOPER IS DOING IN THAT AREA OF HW OR SW:\n\n\n"
- );
- }
- if (report.type == BUG || (report.type == COM && report.severity != 3))
- strcat(IOBuffer, "### RELATED PROBLEMS:\n\n\n");
- elif (report.type == ENH)
- strcat(IOBuffer, "### ENHANCEMENT REQUEST:\n\n\n");
-
- write(report.output);
- launcheditor();
-
- strcpy(string, "Completed report is ");
- strcat(string, report.output);
- strcat(string, ".");
- say(string);
- strcpy(string, "EMail to: ");
- if (!(stricmp(subsystems[report.subsystem].unfriendly, "wormwars"))
- || !(stricmp(subsystems[report.subsystem].unfriendly, "report+")))
- strcat(string, "james_jacobs@altavista.net");
- elif (report.type == ENH)
- strcat(string, "suggestions@amiga.com");
- else
- strcat(string, "bugs@amiga.com");
- say(string);
-
- loop();
- cleanexit(EXIT_SUCCESS);
- }
-
- void cleanexit(SBYTE rc)
- { /* ASL requesters and the File|About... window are assumed to be
- already closed. */
-
- if (OldWindowPtr) ProcessPtr->pr_WindowPtr = OldWindowPtr;
- closewindow();
- FreeNameNodes(&List1);
- FreeNameNodes(&List2);
- if (BkgrndWindowPtr) CloseWindow(BkgrndWindowPtr);
- if (ScreenPtr) CloseScreen(ScreenPtr);
- if (ASLBase) CloseLibrary(ASLBase);
- if (GadToolsBase) CloseLibrary(GadToolsBase);
- if (IntuitionBase) { OpenWorkBench();
- CloseLibrary(IntuitionBase); }
- exit(rc);
-
- // End of program.
- }
-
- void clearkybd(void)
- { struct IntuiMessage* MsgPtr;
-
- while (MsgPtr = (struct IntuiMessage *) GT_GetIMsg(MainWindowPtr->UserPort))
- GT_ReplyIMsg(MsgPtr);
- }
-
- void AddName(struct List* ListPtr, STRPTR name)
- { /* RKM Libraries, p. 496:
-
- "Allocate a NameNode structure, copy the given name into the structure,
- then add it [to] the...list." */
-
- struct NameNode* NameNodePtr;
-
- if (!(NameNodePtr = AllocMem(sizeof(struct NameNode), MEMF_CLEAR)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't allocate memory for list node!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- strcpy(NameNodePtr->nn_Data, name);
- NameNodePtr->nn_Node.ln_Name = NameNodePtr->nn_Data;
- NameNodePtr->nn_Node.ln_Type = NT_USER;
- NameNodePtr->nn_Node.ln_Pri = 0;
- AddHead((struct List *) ListPtr, (struct Node *) NameNodePtr);
- }
- void FreeNameNodes(struct List* ListPtr)
- { /* RKM Libraries, p. 496:
-
- "Free the entire list, including the header. The header is not
- updated as the list is freed. This function demonstrates how to avoid
- referencing freed memory when deallocating nodes." */
-
- struct NameNode *WorkNodePtr, *NextNodePtr;
-
- WorkNodePtr = (struct NameNode *) (ListPtr->lh_Head); // first node
- while (NextNodePtr = (struct NameNode *) (WorkNodePtr->nn_Node.ln_Succ))
- { FreeMem(WorkNodePtr, sizeof(struct NameNode));
- WorkNodePtr = NextNodePtr;
- } }
-
- void gadtools(void)
- { if (!(Gadget.ng_VisualInfo = VisualInfoPtr = (struct VisualInfo *) GetVisualInfo(ScreenPtr, TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't get GadTools visual info!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(MenuPtr = (struct Menu *) CreateMenus(NewMenu, GTMN_FrontPen, BLACK, TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Worm Wars: Can't create menus!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(LayoutMenus(MenuPtr, VisualInfoPtr, TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Worm Wars: Can't lay out menus!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(PrevGadPtr = (struct Gadget *) CreateContext(&GListPtr)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't create GadTools context!\0", 24);
- cleanexit(EXIT_FAILURE);
- } }
-
- void newwindow(SWORD width, SWORD height, STRPTR title, ULONG idcmp)
- { if (!PrevGadPtr)
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't create GadTools gadgets!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(MainWindowPtr = (struct Window *) OpenWindowTags(NULL,
- WA_Top, 12 + 94 - (height / 2),
- WA_Width, width,
- WA_Height, height,
- WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_MENUPICK |
- IDCMP_REFRESHWINDOW | IDCMP_MOUSEBUTTONS |
- idcmp,
- WA_Gadgets, GListPtr,
- WA_CustomScreen, ScreenPtr,
- WA_Activate, TRUE,
- WA_Title, title,
- WA_DragBar, TRUE,
- WA_CloseGadget, TRUE,
- WA_SmartRefresh, TRUE,
- TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open window!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
-
- // redirection of AmigaDOS system requesters
- OldWindowPtr = ProcessPtr->pr_WindowPtr;
- ProcessPtr->pr_WindowPtr = (APTR) MainWindowPtr;
-
- SetMenuStrip(MainWindowPtr, MenuPtr);
- GT_RefreshWindow(MainWindowPtr, NULL);
- }
-
- void fileabout(void)
- { ABOOL done = FALSE;
- SBYTE line;
- UWORD code, qual;
- ULONG class;
- struct Window* AboutWindowPtr;
- struct IntuiMessage* MsgPtr;
-
- if (!(AboutWindowPtr = (struct Window *) OpenWindowTags(NULL,
- WA_Left, 320 - (ABOUTXPIXEL / 2),
- WA_Top, 12 + 94 - (ABOUTYPIXEL / 2),
- WA_Width, ABOUTXPIXEL,
- WA_Height, ABOUTYPIXEL,
- WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY,
- WA_Title, "About Report+",
- WA_Gadgets, NULL,
- WA_CustomScreen, ScreenPtr,
- WA_DragBar, TRUE,
- WA_CloseGadget, TRUE,
- WA_NoCareRefresh, TRUE,
- WA_Activate, TRUE,
- TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open About... window!\0");
- cleanexit(EXIT_FAILURE);
- } else
- { SetAPen(AboutWindowPtr->RPort, BLUE);
- RectFill(AboutWindowPtr->RPort, 8, 13, ABOUTXPIXEL - 9, ABOUTYPIXEL - 5);
- SetAPen(AboutWindowPtr->RPort, ABOUTSHADOW);
- Move(AboutWindowPtr->RPort, 7, ABOUTYPIXEL - 4);
- Draw(AboutWindowPtr->RPort, 7, 12);
- Draw(AboutWindowPtr->RPort, ABOUTXPIXEL - 8, 12);
- SetAPen(AboutWindowPtr->RPort, ABOUTSHINE);
- Draw(AboutWindowPtr->RPort, ABOUTXPIXEL - 8, ABOUTYPIXEL - 4);
- Draw(AboutWindowPtr->RPort, 8, ABOUTYPIXEL - 4);
- SetAPen(AboutWindowPtr->RPort, BLACK);
- SetDrMd(AboutWindowPtr->RPort, JAM1);
- for (line = 0; line <= ABOUTLINES; line++)
- { Move(AboutWindowPtr->RPort, about[line].x, about[line].y);
- Text(AboutWindowPtr->RPort, about[line].text, (SBYTE) strlen(about[line].text));
- }
- DrawBevelBox(AboutWindowPtr->RPort, 18, 21, 48, 23, GT_VisualInfo, VisualInfoPtr);
- DrawImage(AboutWindowPtr->RPort, &About, 20, 22);
-
- while(!done)
- { Wait(1L << AboutWindowPtr->UserPort->mp_SigBit);
- while (MsgPtr = (struct IntuiMessage *) GetMsg(AboutWindowPtr->UserPort))
- { class = MsgPtr->Class;
- code = MsgPtr->Code;
- qual = MsgPtr->Qualifier;
- ReplyMsg(MsgPtr);
- switch(class)
- {
- case IDCMP_CLOSEWINDOW:
- done = TRUE;
- break;
- case IDCMP_RAWKEY:
- if ((!(qual & IEQUALIFIER_REPEAT)) && code < KEYUP && (code < FIRSTQUALIFIER || code > LASTQUALIFIER))
- done = TRUE;
- break;
- default:
- break;
- } } }
- CloseWindow(AboutWindowPtr);
- AboutWindowPtr = NULL;
- clearkybd();
- } }
-
- void closewindow(void)
- { if (MainWindowPtr)
- { clearkybd();
- ClearMenuStrip(MainWindowPtr);
- CloseWindow(MainWindowPtr);
- MainWindowPtr = NULL;
- }
- if (GListPtr)
- { FreeGadgets(GListPtr);
- GListPtr = NULL;
- }
- if (MenuPtr)
- { FreeMenus(MenuPtr);
- MenuPtr = NULL;
- }
- if (VisualInfoPtr)
- { FreeVisualInfo(VisualInfoPtr);
- VisualInfoPtr = NULL;
- } }
-
- void asl(void)
- { struct FileRequester* ASLRqPtr;
-
- if (!(ASLRqPtr = AllocAslRequestTags(ASL_FileRequest, ASL_Pattern, "~(#?.info)", ASL_Window, MainWindowPtr, TAG_DONE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't create ASL request!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (AslRequestTags(ASLRqPtr, ASL_Hail, "Report+ file selector", ASL_FuncFlags, FILF_PATGAD, TAG_DONE) && *(ASLRqPtr->rf_File) != 0)
- { strcpy(aslresult, ASLRqPtr->rf_Dir);
- AddPart(aslresult, ASLRqPtr->rf_File, 254);
- }
- if (ASLRqPtr)
- { FreeAslRequest(ASLRqPtr);
- ASLRqPtr = NULL;
- } }
-
- void loop(void)
- { SBYTE oldpage = page;
- struct Gadget* addr;
- struct MenuItem* ItemPtr;
- struct IntuiMessage* MsgPtr;
- UWORD code, qual;
- ULONG class;
-
- while (page == oldpage)
- { Wait(1L << MainWindowPtr->UserPort->mp_SigBit);
- while (MsgPtr = (struct IntuiMessage *) GT_GetIMsg(MainWindowPtr->UserPort))
- { class = MsgPtr->Class;
- code = MsgPtr->Code;
- qual = MsgPtr->Qualifier;
- addr = MsgPtr->IAddress;
- GT_ReplyIMsg(MsgPtr);
- if (page == 6)
- { if (((struct StringInfo *) ShortGadPtr->SpecialInfo)->Buffer[0])
- GT_SetGadgetAttrs
- ( NextGadPtr,
- MainWindowPtr,
- NULL,
- GA_Disabled, FALSE,
- TAG_DONE
- );
- else
- GT_SetGadgetAttrs
- ( NextGadPtr,
- MainWindowPtr,
- NULL,
- GA_Disabled, TRUE,
- TAG_DONE
- );
- }
- switch(class)
- {
- case IDCMP_MENUPICK:
- while (code != MENUNULL)
- { ItemPtr = ItemAddress(MenuPtr, code);
- switch (MENUNUM(code))
- {
- case MN_PROJECT:
- switch (ITEMNUM(code))
- {
- case IN_ABOUT:
- fileabout();
- break;
- case IN_QUIT:
- cleanexit(EXIT_SUCCESS);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- code = ItemPtr->NextSelect;
- }
- break;
- case IDCMP_CLOSEWINDOW:
- cleanexit(EXIT_SUCCESS);
- break;
- case IDCMP_REFRESHWINDOW:
- GT_BeginRefresh(MainWindowPtr);
- GT_EndRefresh(MainWindowPtr, TRUE);
- break;
- case IDCMP_GADGETDOWN:
- // radio gadgets
- switch(page)
- {
- case 0:
- if (addr == FunctionGadPtr)
- report.function = code;
- break;
- case 1:
- if (addr == TypeGadPtr)
- report.type = code;
- break;
- case 2:
- if (addr == SeverityGadPtr)
- report.severity = code;
- break;
- case 4:
- if (addr == ModelGadPtr)
- report.model = code;
- elif (addr == CPUGadPtr)
- report.cpu = code;
- elif (addr == DeniseGadPtr)
- report.denise = code;
- elif (addr == AgnusGadPtr)
- { report.agnus = code;
- if (code == 0)
- { report.denise = 0;
- GT_SetGadgetAttrs
- ( DeniseGadPtr,
- MainWindowPtr,
- NULL,
- GTMX_Active, 0,
- TAG_DONE
- );
- } elif (code == 1 || code == 2)
- { report.denise = 1;
- GT_SetGadgetAttrs
- ( DeniseGadPtr,
- MainWindowPtr,
- NULL,
- GTMX_Active, 1,
- TAG_DONE
- );
- } else // assumes (code == 3 || code == 4)
- { report.denise = 2;
- GT_SetGadgetAttrs
- ( DeniseGadPtr,
- MainWindowPtr,
- NULL,
- GTMX_Active, 2,
- TAG_DONE
- );
- } }
- break;
- default:
- break;
- }
- break;
- case IDCMP_GADGETUP:
- // buttons, listviews
- if (addr == NextGadPtr)
- { if (page == 0 && report.function == 1)
- page = 6;
- else page++;
- }
- elif (addr == PreviousGadPtr)
- page--;
- else
- { switch(page)
- {
- case 0:
- if (addr == EditorASLGadPtr)
- { asl();
- GT_SetGadgetAttrs
- ( EditorGadPtr,
- MainWindowPtr,
- NULL,
- GTST_String, aslresult,
- TAG_DONE
- );
- }
- break;
- case 1:
- case 6:
- if (addr == OutputASLGadPtr)
- { asl();
- GT_SetGadgetAttrs
- ( OutputGadPtr,
- MainWindowPtr,
- NULL,
- GTST_String, aslresult,
- TAG_DONE
- );
- }
- break;
- case 2:
- if (addr == PPGadPtr)
- refreshpv();
- elif (addr == PPASLGadPtr)
- { asl();
- GT_SetGadgetAttrs
- ( PPGadPtr,
- MainWindowPtr,
- NULL,
- GTST_String, aslresult,
- TAG_DONE
- );
- refreshpv();
- } elif (addr == SubsystemGadPtr)
- { /* code is the position within the list.
- The list goes backwards, ie. Z-A. */
- report.subsystem = code;
- printf("!%d!", code);
- }
- break;
- default:
- break;
- } }
- break;
- default:
- break;
- } } } }
-
- void refreshpv(void)
- { UBYTE i;
- BPTR FileHandle;
-
- strcpy(string, "C:Version ");
- strcat
- ( string,
- ((struct StringInfo *) PPGadPtr->SpecialInfo)->Buffer
- );
- if (!(FileHandle = (BPTR) Open("T:ReportPlus.temp", MODE_NEWFILE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open T:ReportPlus.temp for writing!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!Execute(string, NULL, FileHandle))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't execute C:Version!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!Close(FileHandle))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't close T:ReportPlus.temp for writing!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!(FileHandle = (BPTR) Open("T:ReportPlus.temp", MODE_OLDFILE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open T:ReportPlus.temp for reading!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (Read(FileHandle, string, 64) == -1)
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't read T:ReportPlus.temp!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (!Close(FileHandle))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't close T:ReportPlus.temp for reading!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- DeleteFile("T:ReportPlus.temp"); // returns FALSE for failure
- for (i = 0; i <= MEDFIELD; i++)
- if (string[i] == LF)
- { string[i] = 0;
- break;
- }
- GT_SetGadgetAttrs
- ( PVGadPtr,
- MainWindowPtr,
- NULL,
- GTST_String, string,
- TAG_DONE
- );
- }
-
- void navigate(void)
- { // Never called by page5() or page7().
-
- // previous
-
- if (page >= 2 && page <= 4)
- { switch(page)
- {
- case 2:
- setgadget(10, PAGE2HEIGHT - 16, 304, 12, "Previous", NULL);
- break;
- case 3:
- setgadget(10, PAGE3HEIGHT - 16, 304, 12, "Previous", NULL);
- break;
- case 4:
- setgadget(10, PAGE4HEIGHT - 16, 304, 12, "Previous", NULL);
- break;
- default:
- break;
- }
- PreviousGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- }
-
- // next
- switch(page)
- {
- case 0:
- setgadget( 10, PAGE0HEIGHT - 16, 620, 12, "Begin", NULL);
- break;
- case 1:
- setgadget( 10, PAGE1HEIGHT - 16, 620, 12, "Next", NULL);
- break;
- case 2:
- setgadget(326, PAGE2HEIGHT - 16, 304, 12, "Next", NULL);
- break;
- case 3:
- setgadget(326, PAGE3HEIGHT - 16, 304, 12, "Next", NULL);
- break;
- case 4:
- setgadget(326, PAGE4HEIGHT - 16, 304, 12, "Finish", NULL);
- break;
- case 6:
- setgadget( 10, PAGE6HEIGHT - 16, 620, 12, "Finish", NULL);
- break;
- default:
- break;
- }
- if (page == 6)
- { NextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- GA_Disabled, TRUE,
- TAG_DONE
- );
- } else
- { NextGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
- } }
-
- void setgadget(WORD leftx, WORD topy, WORD width, WORD height, STRPTR text,
- ULONG flags)
- { Gadget.ng_LeftEdge = leftx;
- Gadget.ng_TopEdge = topy;
- Gadget.ng_Width = width;
- Gadget.ng_Height = height;
- Gadget.ng_GadgetText = text;
- Gadget.ng_Flags = flags;
- }
-
- void parse(STRPTR terminator)
- { ABOOL done = FALSE;
- ULONG suboffset;
-
- suboffset = offset;
- while (!done)
- { string[offset - suboffset] = IOBuffer[offset];
- if (!(strncmp(&(IOBuffer[offset]), terminator, strlen(terminator))))
- { string[offset - suboffset] = 0;
- offset += strlen(terminator);
- done = TRUE;
- } else if (offset > strlen(IOBuffer))
- { // failure
- string[0] = 0;
- done = TRUE;
- } else offset++;
- } }
-
- ABOOL read(STRPTR pathname)
- { BPTR FileHandle;
-
- if (!(FileHandle = (BPTR) Open(pathname, MODE_OLDFILE)))
- return FALSE;
- if (Read(FileHandle, IOBuffer, VLONGFIELD) == -1)
- { Close(FileHandle);
- return FALSE;
- }
- Close(FileHandle);
- return TRUE;
- }
-
- void write(STRPTR pathname)
- { BPTR FileHandle;
-
- if (!(FileHandle = (BPTR) Open(pathname, MODE_NEWFILE)))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't open file for writing!\0", 24);
- cleanexit(EXIT_FAILURE);
- }
- if (Write(FileHandle, IOBuffer, strlen(IOBuffer)) == -1)
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't write to file!\0", 24);
- Close(FileHandle);
- cleanexit(EXIT_FAILURE);
- }
- if (!Close(FileHandle))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't close file for writing!\0", 24);
- cleanexit(EXIT_FAILURE);
- } }
-
- void page6(void)
- { // PAGE 6 *************************************************************
-
- gadtools();
- navigate();
-
- // output
- if (!(report.output[0]))
- strcpy(report.output, "RAM:.readme");
- setgadget(150, 22, 320, 12, "Output pathname:", NULL);
- OutputGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.output),
- GTST_MaxChars, LONGFIELD,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
- // output...
- setgadget(472, 22, 28, 12, "...", NULL);
- OutputASLGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( BUTTON_KIND,
- PrevGadPtr,
- &Gadget,
- TAG_DONE
- );
-
- setgadget(150, 46, 350, 12, "Short:", NULL);
- ShortGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amishort),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 58, 350, 12, "Uploader:", NULL);
- UploaderGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amiuploader),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 70, 350, 12, "Author:", NULL);
- AuthorGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amiauthor),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 82, 350, 12, "Type:", NULL);
- AmiTypeGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amitype),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 94, 350, 12, "Replaces:", NULL);
- ReplacesGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amireplaces),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 106, 350, 12, "Requires:", NULL);
- RequiresGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amirequires),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 118, 350, 12, "Version:", NULL);
- VersionGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amiversion),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- setgadget(150, 130, 350, 12, "Distribution:", NULL);
- DistributionGadPtr = PrevGadPtr = (struct Gadget *) CreateGadget
- ( STRING_KIND,
- PrevGadPtr,
- &Gadget,
- GTST_String, &(report.amidistribution),
- GTST_MaxChars, 40,
- GA_TabCycle, TRUE,
- GA_Immediate, TRUE,
- TAG_DONE
- );
-
- newwindow
- ( 640,
- PAGE6HEIGHT,
- "Report+: Aminet Readme Details",
- BUTTONIDCMP | STRINGIDCMP
- );
- ActivateGadget(OutputGadPtr, MainWindowPtr, NULL);
- loop();
-
- strcpy
- ( report.output,
- ((struct StringInfo *) OutputGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amishort,
- ((struct StringInfo *) ShortGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amiuploader,
- ((struct StringInfo *) UploaderGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amiauthor,
- ((struct StringInfo *) AuthorGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amitype,
- ((struct StringInfo *) AmiTypeGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amireplaces,
- ((struct StringInfo *) ReplacesGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amirequires,
- ((struct StringInfo *) RequiresGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amiversion,
- ((struct StringInfo *) VersionGadPtr->SpecialInfo)->Buffer
- );
- strcpy
- ( report.amidistribution,
- ((struct StringInfo *) DistributionGadPtr->SpecialInfo)->Buffer
- );
- closewindow();
- }
-
- void page7(void)
- { newwindow
- ( 640,
- PAGE7HEIGHT,
- "Report+: Finished Aminet Readme",
- BUTTONIDCMP
- );
-
- /* Short: <short>
- Uploader: <uploader>
- Author: <author>
- Type: <type>
- Replaces: <replaces>
- Requires: <requires>
- Version: <version>
- Distribution: <distribution>
-
- <description> */
-
- strcpy(IOBuffer, "Short: ");
- strcat(IOBuffer, report.amishort);
- strcat(IOBuffer, "\n");
- if (report.amiuploader[0])
- { strcat(IOBuffer, "Uploader: ");
- strcat(IOBuffer, report.amiuploader);
- strcat(IOBuffer, "\n");
- }
- if (report.amiauthor[0])
- { strcat(IOBuffer, "Author: ");
- strcat(IOBuffer, report.amiauthor);
- strcat(IOBuffer, "\n");
- }
- if (report.amitype[0])
- { strcat(IOBuffer, "Type: ");
- strcat(IOBuffer, report.amitype);
- strcat(IOBuffer, "\n");
- }
- if (report.amireplaces[0])
- { strcat(IOBuffer, "Type: ");
- strcat(IOBuffer, report.amireplaces);
- strcat(IOBuffer, "\n");
- }
- if (report.amirequires[0])
- { strcat(IOBuffer, "Requires: ");
- strcat(IOBuffer, report.amirequires);
- strcat(IOBuffer, "\n");
- }
- if (report.amiversion[0])
- { strcat(IOBuffer, "Version: ");
- strcat(IOBuffer, report.amiversion);
- strcat(IOBuffer, "\n");
- }
- if (report.amidistribution[0])
- { strcat(IOBuffer, "Distribution: ");
- strcat(IOBuffer, report.amidistribution);
- strcat(IOBuffer, "\n");
- }
- strcat(IOBuffer, "\n");
-
- write(report.output);
- launcheditor();
-
- strcpy(string, "Completed readme is ");
- strcat(string, report.output);
- strcat(string, ".");
- say(string);
- say("Upload this readme to Aminet with your submission.");
-
- loop();
- cleanexit(EXIT_SUCCESS);
- }
-
- void say(STRPTR sentence)
- { PERSIST SWORD y = 30;
-
- Move
- ( MainWindowPtr->RPort,
- 320 - (strlen(sentence) * 4),
- y
- );
- Text
- ( MainWindowPtr->RPort,
- sentence,
- strlen(sentence)
- );
- y += 16;
- }
-
- void launcheditor(void)
- { SetAPen(MainWindowPtr->RPort, BLACK);
- say("Launching editor...");
- strcpy(string, report.editor);
- strcat(string, " ");
- strcat
- ( string,
- report.output
- );
- if (!Execute(string, NULL, NULL))
- { DisplayAlert(AT_Recovery, "\0\20\20Report+: Can't launch editor!\0", 24);
- cleanexit(EXIT_FAILURE);
- } }
-
- // Must have blank line at EOF.
-